/**
 * 母板页插件
 * Esmool @ 2016
 *
 * 在母板页中可以声明函数 beforePageLoad 和 afterPageLoad
 *     function beforePageLoad() { ... } 或 window.beforePageLoad = function () { ... }
 *     function afterPageLoad() { ... } 或 window.afterPageLoad = function () { ... }
 * 在子页面中可以声明函数 pageLoad
 *     function pageLoad() { ... } 或 window.pageLoad = function () { ... }
 * 以完成页面初始化动作.
 *
 * 上述三个函数的调用顺序为
 *     1. beforePageLoad
 *     2. pageLoad
 *     3. afterPageLoad
 */
(function ($) {

    /**
     * 执行母板解析
     */
    function parse() {
        var collection = $('div[masterTag], *[masterPlaceHolder]');
        collection.filter('div[masterTag]').each(function () {
            var content = $(this).html();
            var tagName = $(this).attr('masterTag');
            var selector = '*[masterPlaceHolder="' + tagName + '"]';
            var placeHolder = collection.filter(selector);
            if (placeHolder.length > 0) {
                placeHolder.html(content);
            }
            $(this).remove();
        });
    }

    /**
     * 检查函数是否存在
     * @param  function () func
     * @param  function () defaultFunc
     * @return function ()
     */
    function checkCallback(func, defaultFunc) {
        if (!!func && typeof func === 'function')
            return func;

        return defaultFunc;
    }

    /**
     * 解析母版完成动作
     */
    function afterParse() {
        var pageLoad = checkCallback(window.pageLoad, function () {
                console.warn('Cannot find function pageLoad()');
            }),
            beforePageLoad = checkCallback(window.beforePageLoad, function () {}),
            afterPageLoad = checkCallback(window.afterParse, function () {});

        beforePageLoad();
        pageLoad();
        afterPageLoad();
    }

    /**
     * 注册解析母版动作
     */
    $(document).ready(function () {
        parse();
        afterParse();
    });

})(jQuery);